package god.day02;

import java.util.Stack;

/**
 * @author wang hao
 * @date 2023-02-18 18:17
 *
 *      如何用栈结构实现队列结构
 *          两个栈
 *              push 栈   1 2 3 4 5
 *              pop  栈   出栈的时候 先出栈到 pop栈  再从pop栈导出去
 *
 *              原则  push栈 到 pop 栈 得一次性倒完
 *                   如果pop栈 没有拿完数据  不能倒数据
 *
 *
 *      如何用队列结构实现栈结构
 *          5 4 3 2 1
 *          要 出队
 *          1 2 3 4 进B队列 弹出 5
 *          此时入队 6、7 则 入队 B队列
 *          要弹出 把B 的 12346 放到 A队列里面去 把 7 弹出去
 */
public class Demo03 {
    // 如何用栈结构实现队列结构
    public static class TwoStacksQueue{
        public Stack<Integer> stackPuhs;
        public Stack<Integer> stackPop;

        public TwoStacksQueue() {
            stackPuhs = new Stack<>();
            stackPop = new Stack<>();
        }

        // push栈想pop栈中倒入数据
        private void pushToPop(){
            if (stackPop.empty()){
                while (!stackPuhs.empty()){
                    stackPop.push(stackPuhs.pop());
                }
            }
        }

        // 添加数据
        public void add(int pushInt){
            stackPuhs.push(pushInt);
            pushToPop();
        }

        // 出队
        public int poll(){
            if (stackPop.empty() && stackPuhs.empty()){
                throw new RuntimeException("队列空了");
            }

            pushToPop();
            return stackPop.pop();
        }

    }


}
